package editorsvg.propiedades;

import editorsvg.editor.estilo.Pintura;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JColorChooser;
import javax.swing.JComponent;

/**
 * Propiedad que contiene un objeto Pintura.
 *
 * @author Jorge Berjano
 */
public class PropiedadPintura extends Propiedad  {
    
    private transient JButton botonEdicion;
    private transient Image imagenColor;
    
    /** Constructor por defecto */
    public PropiedadPintura() {        
    }

    public PropiedadPintura(Object objeto, String nombre) {
        super(objeto, nombre);
    }
    
    public PropiedadPintura(Object objeto, String nombre, String alias) {
        super(objeto, nombre, alias);
    }

    @Override
    public Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
    
    @Override
    public Class getClase() {
        return Pintura.class;
    }
        
    @Override
    public String toString() {

        Pintura pintura = obtenerPintura();
        if (pintura == null)
            return "";
        
        return pintura.toString();        
    }  
    
    public Pintura obtenerPintura() {
        Object valor = getValor();
        if (valor instanceof Pintura)
            return (Pintura) valor;
        else
            return null;
    }

    public void asignarPintura(Pintura pintura) {
        setValor(pintura);
        colorearImagen(pintura);
    }
    
    public void colorearImagen(Pintura pintura) {
       if (imagenColor != null && pintura != null) {
            Graphics2D g = (Graphics2D) imagenColor.getGraphics();
            g.setPaint(pintura.getPaint());
            g.fillRect(0, 0, 10, 10);
        }
    }

    @Override
    public JComponent obtenerComponenteModificacion() {
        if (botonEdicion == null) {
            if (imagenColor == null) {
                imagenColor = new BufferedImage(10, 10, BufferedImage.TYPE_INT_RGB);
                Pintura pintura = obtenerPintura();
                colorearImagen(pintura);
            }

            botonEdicion = new JButton(new ImageIcon(imagenColor));
            botonEdicion.addActionListener(new ActionListener() {

                public void actionPerformed(ActionEvent evento) {
                    BotonPulsado(evento);
                }
            });
        }
        return botonEdicion;
    }
    // Si se pulsa el bot�n se muestra el dialogo de selecci�n de fuente
    // Al aceptar el di�logo se cambia la fuente del par�metro.
    private void BotonPulsado(ActionEvent evento) {      
        Pintura pintura = obtenerPintura();

        Color color = pintura != null && pintura.getRgb() != null ? new Color(pintura.getRgb()) : Color.BLACK;
        Color nuevoColor = JColorChooser.showDialog(null, "Color para la propiedad " + getNombre(), color);
        if (nuevoColor != null) {

            asignarPintura(new Pintura(nuevoColor.getRGB()));
            
            //notificarCambios();
        }
    }
    
    @Override
    public boolean permitirEditarTexto() {
        return true;
    }

    @Override
    public boolean parsearPropiedad(String valorString) {
        if (valorString == null || valorString.isEmpty()) {
            asignarPintura(null);
        } else {
            asignarPintura(new Pintura(valorString));
        }
        
        return true;
    }
}
